package com.yupi.yuaicodemother.ai.rag;

import dev.langchain4j.model.embedding.EmbeddingModel;
import dev.langchain4j.model.openai.OpenAiEmbeddingModel;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 嵌入模型配置类，用于配置 OpenAI 嵌入模型的相关参数，并将其注册为 Spring Bean。
 * 该类从配置文件中读取 API Key 和模型名称，用于创建 OpenAI 嵌入模型实例。
 */
@Configuration
public class EmbeddingModelConfig {

    /**
     * 从 application.yml 配置文件中注入 OpenAI 的 API Key。
     * 配置项为 rag.embedding.openai-key，用于调用 OpenAI 服务时进行身份验证。
     */
    @Value("${rag.embedding.openai-key}")
    private String apiKey;

    /**
     * 从 application.yml 配置文件中注入嵌入模型的名称。
     * 配置项为 rag.embedding.model，默认值为 text-embedding-ada-002。
     */
    @Value("${rag.embedding.model:text-embedding-ada-002}")
    private String modelName;

    /**
     * 创建并返回一个 OpenAI 嵌入模型实例，将其注册为 Spring Bean。
     * 该 Bean 可以在其他组件中通过依赖注入的方式使用。
     * 
     * @return 配置好的 OpenAI 嵌入模型实例
     */
    @Bean
    public EmbeddingModel embeddingModel() {
        // 使用 OpenAiEmbeddingModel 构建器创建嵌入模型实例
        // 从配置文件注入的 API Key 用于身份验证
        // 从配置文件注入的模型名称指定使用的嵌入模型
        return OpenAiEmbeddingModel.builder()
                .apiKey(apiKey)           // 从 application.yml 注入
                .modelName(modelName)
                .build();
    }
}